package com.dyylearn.throws_;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * @author green-citrus
 * @version 1.0
 */
public class ThrowsDetail {
    public static void main(String[] args) {

    }

    public void f2() {
        //1.对于编译异常，程序中必须处理，比如try-catch或者throws
        //2.对于运行时异常，程序中如果没有处理，默认就是throws的方式处理
        //  将发生的异常抛出，交给调用者（方法）来处理，最顶级的处理者就是JVM
        int n1 = 10;
        int n2 = 0;
        double res = n1 / n2;
    }

    public static void f1() throws FileNotFoundException{
        //调用f3()报错
        //1.因为 f3() 方法抛出一个编译异常
        //2.即这时，就要f1() 必须处理这个编译异常
        //3.在f1()中，要么try-catch-finally，或者继续throws这个编译异常
        f3(); // 抛出异常
    }

    public static void f3() throws FileNotFoundException {
        FileInputStream fileInputStream = new FileInputStream("d://aa.txt");
    }

    public static void f4() {
        //1.在f4()中调用方法f5()，是OK的
        //2.原因是f5() 抛出的是运行异常
        //3.对于运行时异常，程序中如果没有处理，默认就是throws的方式处理
        f5();
    }

    public static void f5() throws ArithmeticException {

    }
}

class Father { // 父类
    public void method() throws RuntimeException {

    }
}

class Son extends Father { // 子类
    //3.子类重写父类的方法时，对抛出异常的规定：子类重写的方法，
    // 所抛出的异常类型要么和父类抛出的异常一致，要么为父类抛出的异常的类型的子类型
    //4.在throws过程中，如果有方法try-catch，就相当于处理异常，就可以不必throws
    public void method() throws NullPointerException {

    }
}
